<?php
try{
    $dsn="mysql:host=127.0.0.1;dbname=bishe";      //配置信息
    $name="root";                      //mysql账号
    $pwd="zhen560423";                       //密码
    $pdo=new PDO($dsn,$name,$pwd);       //实例化pdo对象
    //设置错误处理模式，PDO::ERRMODE_EXCEPTION（异常模式）,PDO::ERRMODE_SILENT（沉默，不警告不报错），PDO::ERRMODE_WARNING（警告模式）
    $pdo -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);    //设置模式为异常
    $pdo -> setAttribute(PDO::ATTR_AUTOCOMMIT,1);     //事务是否自动提交，0是关闭，1是自动
    //设置结果集返回格式     PDO::FETCH_ASSOC（关联数组）  PDO::FETCH_NUM（索引数组）  PDO::FETCH_BOTH（两种数组都返回）  PDO::FETCH_OBJ（对象）
    $pdo -> setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);      //设置返回数组是关联数组
}catch(PDOException $e){
    echo $e -> getMessage().'<br />';    //错误信息
    echo $e -> getFile().'<br />';       //错误产生的文件
    echo $e -> getLine().'<br />';       //错误产生的行
    echo $e -> getCode().'<br />';       //错误码
}
//查询过期订单
function select_overdue_order($pdo){
    try {
        // 准备查询语句
        $query = "SELECT order_id,goods_id,count FROM orders WHERE (NOW()-order_id)>(10*60) AND user_is_payment=0 AND is_rollback=0";
        $statement = $pdo->prepare($query);
        // 执行查询
        $statement->execute();
        // 获取结果
        $result = $statement->fetchAll();      //把查询结构赋值给$count
        return $result;
    } catch (PDOException $e) {
        // 异常处理
        // echo "Error querying database: " . $e->getMessage();
        return -1; // 表示查询出错
    }
}
//回滚
function rollback($pdo,$order_id,$goods_id,$count){
    try {
        $pdo -> setAttribute(PDO::ATTR_AUTOCOMMIT,0);     //事务是否自动提交，0是关闭，1是自动
        $pdo -> beginTransaction();        //开启事务

        // 准备查询语句
        $query = "UPDATE orders SET is_rollback=1 WHERE order_id=? AND user_is_payment=0 and (NOW()-create_time)>(10*60)";
        $statement = $pdo->prepare($query);
        $statement->bindParam(1, $order_id);
        // 执行查询
        $statement->execute();
        $result = $statement->rowCount();      //把修改的行数赋值给$result
        
        // 准备查询语句2
        $query2 = "UPDATE goods SET count=count + ?  WHERE goods_id=?";
        $statement2 = $pdo->prepare($query2);
        $statement2->bindParam(1, $count);
        $statement2->bindParam(2, $goods_id);
        // 执行查询
        $statement2->execute();
        $result2 = $statement2->rowCount();      //把修改的行数赋值给$result

        if($result==1 && $result2==1){
            $pdo -> commit();
            $pdo -> setAttribute(PDO::ATTR_AUTOCOMMIT,1);     //事务是否自动提交，0是关闭，1是自动
            return 1;
        }else{
            $pdo -> rollback();    //回滚
            $pdo -> setAttribute(PDO::ATTR_AUTOCOMMIT,1);     //事务是否自动提交，0是关闭，1是自动
            return 0;
        }
    } catch (PDOException $e) {
        // 异常处理
        // echo "Error querying database: " . $e->getMessage();
        $pdo -> rollback();
        $pdo -> setAttribute(PDO::ATTR_AUTOCOMMIT,1);     //事务是否自动提交，0是关闭，1是自动
        return -1;
    }
}
$data=select_overdue_order($pdo);
// print_r($data);
// echo count($data);

for($i=0;$i<count($data);$i++){
    $order_id=$data[$i]['order_id'];
    $goods_id=$data[$i]['goods_id'];
    $count=$data[$i]["count"];
    rollback($pdo,$order_id,$goods_id,$count);
}

?>
